#ifndef LABYRINTHGAMETEST_H_
#define LABYRINTHGAMETEST_H_

#include "IOStreamTestFixture.h"

class LabyrinthGameTest: public IOStreamTestFixture {
	CPPUNIT_TEST_SUITE(LabyrinthGameTest);
	CPPUNIT_TEST(testWelcome);
	CPPUNIT_TEST(testExit);
	CPPUNIT_TEST(testRestart);
	CPPUNIT_TEST(testInvalidCommand);
	CPPUNIT_TEST(testInvalidMove);
	CPPUNIT_TEST(testMoveRightWithCommand_r);
	CPPUNIT_TEST(testMoveRightWithCommand_R);
	CPPUNIT_TEST(testMoveDownWithCommand_d);
	CPPUNIT_TEST(testMoveDownWithCommand_D);
	CPPUNIT_TEST(testMoveLeftWithCommand_l);
	CPPUNIT_TEST(testMoveLeftWithCommand_L);
	CPPUNIT_TEST(testMoveUpWithCommand_u);
	CPPUNIT_TEST(testMoveUpWithCommand_U);
	CPPUNIT_TEST(testWinFirstGame);
	CPPUNIT_TEST(testWinThirdGame);
	CPPUNIT_TEST(testWinFifthGame);
	CPPUNIT_TEST(testWinInTop5);
	CPPUNIT_TEST(testWinOutOfTop5);
	CPPUNIT_TEST(testTop);
	CPPUNIT_TEST(testEmptyScoreboard);
	CPPUNIT_TEST_SUITE_END();

public:
	void testWelcome();
	void testExit();
	void testRestart();
	void testInvalidCommand();
	void testInvalidMove();
	void testMoveRightWithCommand_r();
	void testMoveRightWithCommand_R();
	void testMoveDownWithCommand_d();
	void testMoveDownWithCommand_D();
	void testMoveLeftWithCommand_l();
	void testMoveLeftWithCommand_L();
	void testMoveUpWithCommand_u();
	void testMoveUpWithCommand_U();
	void testWinFirstGame();
	void testWinThirdGame();
	void testWinFifthGame();
	void testWinInTop5();
	void testWinOutOfTop5();
	void testTop();
	void testEmptyScoreboard();
};

#endif /* LABYRINTHGAMETEST_H_ */
